package com.dlyk.util;

import org.springframework.util.ObjectUtils;

import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * 缓存通用工具类
 */
public class CacheUtils {

    /**
     * 带有缓存的查询工具方法
     * Supplier：供给者/生产者
     * Consumer：消费者
     */
    public static <T> T getCacheData(Supplier<T> cacheSelector, Supplier<T> dbSelector, Consumer<T> cacheSave) {

        // 先从缓存（redis）中查询
        T cache = cacheSelector.get();

        // 如果缓存（redis）中查不到
        if (ObjectUtils.isEmpty(cache)) {

            // 再从数据库（mysql）查询
            T db = dbSelector.get();

            // 从数据库（mysql）查询到以后
            if (!ObjectUtils.isEmpty(db)) {
                // 将数据放入缓存（redis）中
                cacheSave.accept(db);
                // 返回数据
                return db;
            }
        }
        // 返回数据
        return cache;
    }

}

